package com.flst.persistance.singletonDao;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.flst.model.Produit;
import com.flst.persistance.IPanierDao;
/**
 * 
 * Cette classe contient l'implementation en Singleton de l'interface IPanierDao
 *
 */
public class PanierDaoSingleton implements IPanierDao{
	private static PanierDaoSingleton instance;
	/**
	 * R&eacute;cup&egrave;re l'instance de cette classe
	 * @return L'instance de PanierDaoSingleton
	 */
	public PanierDaoSingleton getInstance() {
		if (instance == null) {
			instance = new PanierDaoSingleton();
		}
		return instance;
	}
	
	private static Map<Long, Produit> bdd = new HashMap<Long, Produit>();
	private Long id = 0L;
	
	

	/**
	 * R&eacute;cup&egrave;re l'ensemble des produits contenus dans le panier
	 * @return la liste des produits du panier
	 */
	@Override
	public List<Produit> getAllProduits() {

		List<Produit> listeProduit = new ArrayList<Produit>();
		listeProduit.addAll(bdd.values());
		return listeProduit;
	}
	
	/**
	 * Ajoute un produit au panier
	 * @param prod
	 * 		produit &agrave; mettre au panier
	 * @return l'id du produit dans le Hashmap
	 */
	@Override
	public Long addProduit(Produit prod) {
		// TODO Auto-generated method stub
		Long newId = id++;
		prod.setIdPanier(newId);
		bdd.put(newId, prod);
		return newId;
	}
	/**
	 * supprime un produit du panier
	 * @param id
	 * 		id du Hashmap du produit &agrave; supprimer
	 * @return true
	 */
	@Override
	public boolean removeProduit(Long id) {
		// TODO Auto-generated method stub
		bdd.remove(id);
		return true;
	}
	/**
	 *R&eacute;cup&egrave;re le nombre de produits dans le panier
	 * @return le nombre de produits dans le panier
	 */
	@Override
	public int getQuantiteArticle() {
		// TODO Auto-generated method stub
		return bdd.size();
	}
	/**
	 * Vide le panier
	 */
	@Override
	public void clearPanier() {
		bdd.clear();
		
	}
	/**
	 *R&eacute;cup&egrave;re le prix total du panier
	 * @return le prix total du panier
	 */
	@Override
	public float getPrixTotal() {
		List<Produit> listeProduit = new ArrayList<Produit>();
		float prixTotal=0;
		listeProduit.addAll(bdd.values());
		for (Produit produit : listeProduit) {
			
			prixTotal+=produit.getPrix();
		}
		return prixTotal;
	}

//	@Override
//	public boolean removeProduct(Produit prod) {
//		bdd.remove(Produit.getId());
//		return true;
//  }	
		
	
	

}
